from Utils.Tool import parser
import sys,pyperclip,time
import threading
from prompt_toolkit import PromptSession, prompt
from prompt_toolkit.completion import Completer, Completion
from prompt_toolkit.history import InMemoryHistory  # 内存历史记录（临时）
from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
from prompt_toolkit.cursor_shapes import CursorShape  # 光标样式
from prompt_toolkit.keys import Keys
from prompt_toolkit.key_binding import KeyBindings
from colorama import Fore, Style, init
init()

class SuperInput:    
    def __init__(self):
        self.completer = self.CustomCompleter()
        self.history = InMemoryHistory()  # 临时内存历史记录
        self.session = PromptSession()  # 使用 PromptSession 更灵活
        self.default=""
        self.key_bindings = self._create_key_bindings()
        
    def _create_key_bindings(self):
        bindings = KeyBindings()

        @bindings.add(Keys.ControlDelete) # 绑定 Ctrl+backspace 键
        def _(event):
            # 清空当前输入
            event.current_buffer.reset()
        @bindings.add(Keys.ControlQ) # 绑定 Ctrl+q 键
        def _(event):
            # 退出当前脚本程序
            print(Fore.RED+"\n程序退出")
            event.current_buffer.text=""
            sys.exit()

        # 绑定 F8（复制当前命令）
        @bindings.add(Keys.F8)
        def _(event):
            # 复制当前命令到剪贴板
            e=event.current_buffer.text
            pyperclip.copy(e)
            def show_message():
                event.current_buffer.text="复制成功"
                time.sleep(0.3)
                event.current_buffer.text=e
            threading.Thread(target=show_message).start()


        # 绑定 Tab 键
        @bindings.add(Keys.Tab) 
        def _(event):            
            e=event.current_buffer.text
            e=parser(e)
            if e :
                event.current_buffer.text=e    
        # 绑定 ctrl+' 键
        @bindings.add(Keys.ControlUp) 
        def _(event):            
            e=event.current_buffer.text
            e=f'"{e}"'
            if e :
                event.current_buffer.text=e

        @bindings.add(Keys.ControlRight) 
        def _(event):            
            e=event.current_buffer.text            
            if e :
                
                if ".click()" in e:
                    e=e.replace(".click()","")
                    event.current_buffer.text=e
                    return    
                
                e=e+".click()"
                event.current_buffer.text=e





        @bindings.add(Keys.F1)  # 绑定 F1 显示帮助信息
        def _(event):
            init()
            print("\n")
            print(Fore.YELLOW + "F1: 显示帮助信息")
            print(Fore.YELLOW + "ctrl+delete: 清空当前输入")
            print(Fore.YELLOW + "tab: 自动补全")
    
             
        return bindings
   
        
    class CustomCompleter(Completer):
        def get_completions(self, document, complete_event):
            # 获取输入的文本
            text = document.text

            # 如果包含 "t:"，则补全为 "tab"
            if text.startswith('t:') or text.startswith('tab:') or text.startswith('x:') :
                cmd=f'tab.eles("{text}")'
                yield Completion(cmd, start_position=-len(text))
            elif text.startswith('@') :
                cmd=f'tab.eles("{text}")'
                yield Completion(cmd, start_position=-len(text))
            elif text =="iframe" :
                cmd=f'tab.eles("t:iframe")'
                yield Completion(cmd, start_position=-len(text))
            elif text.startswith('"') and  text.endswith('"') :
                cmd=f'tab.eles({text})'
                yield Completion(cmd, start_position=-len(text))
            elif text.startswith('www.') :
                cmd=f'tab.get("http://{text}")'
                yield Completion(cmd, start_position=-len(text))
            elif text.startswith('http') :
                cmd=f'tab.get("{text}")'
                yield Completion(cmd, start_position=-len(text))
            elif text.startswith('//') :
                cmd=f"tab.eles('x:{text}')"
                yield Completion(cmd, start_position=-len(text))

            # 如果包含 "x:"，则补全为 "xpath"
            elif text.startswith('xp:'):
                cmd=f'tab.eles("xpath{text}")'
                yield Completion(cmd, start_position=-len(text))
    
    def input(self, tip):
            """
            获取用户输入，支持临时历史记录（↑/↓仅在本次会话有效）
            """
            
            user_input = prompt(
                tip,
                completer=self.completer,
                history=self.history,  # 使用内存历史记录
                auto_suggest=AutoSuggestFromHistory(),
                enable_history_search=True,  # 启用↑/↓搜索
                cursor=CursorShape.BLINKING_BEAM, # 光标样式
                default=self.default,
                key_bindings=self.key_bindings,  # 添加自定义键绑定
                
            )
            self.default=user_input
            # 不自动回复上次输入
            if 1 or "www." in user_input :
                self.default=""
            return user_input
    

# 示例用法
if __name__ == "__main__":
    super_input = SuperInput()
    while True:
        user_input = super_input.input('请输入--: ')
        print(f'你输入的是: {user_input}')